<?php 
//函数
?>

<?php 

    function test_f($a, $b, $c) {
        $x = $a+$b+$c;
        echo $x;
        return ;
    };

    function var_args() {
        echo 'Number of parameters - 参数个数';
        echo func_num_args();
        echo '<br />';
        $args = func_get_args();
        foreach ($args as $arg) {
            echo $arg.'<br />';
        }
    };

    var_args($a, $b, $c);

    echo '<h2>5-7 理解作用域</h2>';
    function my_fn() {
       $var = "contents";
    };
    my_fn();
    
    echo $var;


    echo '<h2>5-8 引用传递和值传递</h2>';
    function increment(&$value, $amount = 1) {
        $value = $value + $amount;
    }

    $value = 10;
    increment ($value);
    echo $value;


    echo "<br />";
    $a = 10;
    echo $a."<br />";
    increment ($a);
    echo $a;

    echo '<h2>5-10 递归实现</h2>';
    function reverse_r($str) {
        ////strlen() 函数返回字符串的长度
        if (strlen($str) > 0 ) {
             //substr() 函数返回字符串的一部分。
            reverse_r(substr($str, 1));
        }
        echo substr($str, 0, 1);//不断打印字符串的最后一位
        $i= 5;
        $i = $i++;
        echo $i;
        return;
    }


    function reverse_i($str) {
        for ($i=1; $i<=strlen($str); $i++) {
            echo substr($str, -$i, 1);
        }
        return;
    }


    reverse_r('Hello');
    echo '<br />';
    reverse_i('Hello');

    echo '<br />';
    echo substr("Hell",0,1)."<br>";

    echo '<h2>5-10 匿名（闭包）函数实现</h2>';

    function my_print($value, $value2, $value3) {
        echo "$value.$value2.$value3<br />";
    }
    //$array = array('Tires', 'Oil', 'Spark Plugs');
    $array = array('Tires' => 100, 'Oil' => 10, 'Spark Plugs' => 4);

    //array_walk函数对数组中的每个元素应用用户自定义函数。在函数中，数组的键名和键值是参数。
    array_walk($array, 'my_print', '666', );

    echo '<h3>5-10 闭包函数对全局作用域变量访问</h3>';

    $printer = function( $value, $key ) {echo "$key - $value <br />";};

    $products = [ 'Tires' => 100,
                  'Oil' => 10,
                  'Spark Plugs' => 4,
                ];

    $markup = 0.20;
    $apply = function(&$val) use ($markup) {
        $val = $val * (1+$markup);
    };
    echo '产品价格<br />';
    array_walk($products, $printer);
    echo '价格调整后<br />';
    array_walk($products, $apply);
    array_walk($products, $printer);


?>